﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using AcadPos.Entity;
using TrustX.Dados;
using System.Data;
using System.Data.SqlClient;

namespace AcadPos.Data
{
    public class DBProfissional
    {
        #region Listar Profissionais
        public DataTable listarProfissionais(string pNome)
        {
            #region Script
            string SQL = @"SELECT tp.ID_PROFISSIONAL,
                                   tp.NOME,
                                   tp.CPF,
                                   tp.RG,
                                   tp.ORGAO_EXPEDITOR_RG,
                                   tp.UF_RG,
                                   tp.DATA_EXPEDICAO_RG,
                                   tp.NACIONALIDADE,
                                   tp.NATURALIDADE,
                                   tp.UF_NATURALIDADE,
                                   tp.GENERO,
                                   tp.ESTADO_CIVIL,
                                   tp.NUMERO_ISS,
                                   tp.NUMERO_PIS,
                                   tp.REGISTRO_PROFISSIONAL,
                                   tp.EMAIL,
                                   tp.DDD_TELEFONE,
                                   tp.TELEFONE,
                                   tp.DDD_CELULAR,
                                   tp.CELULAR,
                                   tp.PAI,
                                   tp.MAE,
                                   tp.CEP,
                                   tp.ENDERECO,
                                   tp.NUMERO,
                                   tp.COMPLEMENTO,
                                   tp.BAIRRO,
                                   tp.UF_ENDERECO,
                                   tp.CIDADE,
                                   tp.ID_BANCO,
                                   tp.AGENCIA,
                                   tp.CONTA,
                                   tp.SITUACAO
                            FROM   TB_PROFISSIONAL tp
                            WHERE  tp.NOME LIKE '%' + @NOME + '%'";
            #endregion
            DataAccess db = new DataAccess(SQL);
            db.AddParam("@NOME", SqlDbType.VarChar, pNome);
            return db.GetDataTable();
        }
        #endregion

        #region Get Dados Pessoas Profissional
        public DataTable GetDadosPessoaisProfissional(int pCodigo)
        {
            #region Script
            string SQL = @"SELECT tp.ID_PROFISSIONAL,
                                   tp.NOME,
                                   tp.CPF,
                                   tp.RG,
                                   tp.ORGAO_EXPEDITOR_RG,
                                   tp.UF_RG,
                                   CONVERT(VARCHAR,tp.DATA_EXPEDICAO_RG,103) AS DATA_EXPEDICAO_RG,
                                   tp.NACIONALIDADE,
                                   tp.NATURALIDADE,
                                   tp.UF_NATURALIDADE,
                                   CASE tp.GENERO
                                        WHEN 'F' THEN 'FEMININO'
                                        WHEN 'M' THEN 'MASCULINO'
                                   END AS GENERO,
                                   tp.ESTADO_CIVIL,
                                   tp.NUMERO_ISS,
                                   tp.NUMERO_PIS,
                                   tp.REGISTRO_PROFISSIONAL,
                                   tp.EMAIL,
                                   tp.DDD_TELEFONE,
                                   tp.TELEFONE,
                                   tp.DDD_CELULAR,
                                   tp.CELULAR,
                                   tp.PAI,
                                   tp.MAE,
                                   tp.CEP,
                                   tp.ENDERECO,
                                   tp.NUMERO,
                                   tp.COMPLEMENTO,
                                   tp.BAIRRO,
                                   tp.UF_ENDERECO,
                                   tp.CIDADE
                            FROM   TB_PROFISSIONAL tp
                            WHERE  tp.ID_PROFISSIONAL = @ID_PROFISSIONAL";
            #endregion
            DataAccess db = new DataAccess(SQL);
            db.AddParam("@ID_PROFISSIONAL", SqlDbType.Int, pCodigo);
            return db.GetDataTable();
        }
        #endregion

        #region Get Dados do profissional
        public Profissional getDadosProfissional(int pCodProfissional)
        {
            #region Script
            string SQL = @"SELECT tp.ID_PROFISSIONAL,
                                   tp.NOME,
                                   tp.CPF,
                                   tp.RG,
                                   tp.ORGAO_EXPEDITOR_RG,
                                   tp.UF_RG,
                                   tp.DATA_EXPEDICAO_RG,
                                   tp.NACIONALIDADE,
                                   tp.NATURALIDADE,
                                   tp.UF_NATURALIDADE,
                                   tp.GENERO,
                                   tp.ESTADO_CIVIL,
                                   tp.NUMERO_ISS,
                                   tp.NUMERO_PIS,
                                   tp.REGISTRO_PROFISSIONAL,
                                   tp.EMAIL,
                                   tp.DDD_TELEFONE,
                                   tp.TELEFONE,
                                   tp.DDD_CELULAR,
                                   tp.CELULAR,
                                   tp.PAI,
                                   tp.MAE,
                                   tp.CEP,
                                   tp.ENDERECO,
                                   tp.NUMERO,
                                   tp.COMPLEMENTO,
                                   tp.BAIRRO,
                                   tp.UF_ENDERECO,
                                   tp.CIDADE,
                                   tp.ID_BANCO,
                                   tp.AGENCIA,
                                   tp.CONTA,
                                   tp.SITUACAO
                            FROM   TB_PROFISSIONAL tp
                            WHERE  tp.ID_PROFISSIONAL = @ID_PROFISSIONAL";
            #endregion
            DataAccess db = new DataAccess(SQL);
            db.AddParam("@ID_PROFISSIONAL", SqlDbType.Int, pCodProfissional);
            try
            {
                db.AbrirConexao();
                SqlDataReader dr = db.ExecuteReader();
                Profissional profi = new Profissional();
                if (dr.Read())
                {
                    profi.Agencia = dr["AGENCIA"].ToString();
                    profi.Bairro = dr["BAIRRO"].ToString();
                    profi.Celular = dr["CELULAR"].ToString();
                    profi.Cep = dr["CEP"].ToString();
                    profi.Cidade = dr["CIDADE"].ToString();
                    profi.CodBanco = Convert.ToInt32(dr["ID_BANCO"]);
                    profi.Codigo = pCodProfissional;
                    profi.Complemento = dr["COMPLEMENTO"].ToString();
                    profi.Conta = dr["CONTA"].ToString() ;
                    profi.Cpf = dr["CPF"].ToString();
                    profi.Data_expedicao_rg = dr["DATA_EXPEDICAO_RG"].ToString();
                    profi.Ddd_celular = dr["DDD_CELULAR"].ToString();
                    profi.Ddd_telefone = dr["DDD_TELEFONE"].ToString();
                    profi.Email = dr["EMAIL"].ToString();
                    profi.Endereco = dr["ENDERECO"].ToString();
                    profi.Estado_civil = dr["ESTADO_CIVIL"].ToString();
                    profi.Genero = dr["GENERO"].ToString();
                    profi.Mae = dr["MAE"].ToString();
                    profi.Nacionalidade = dr["NACIONALIDADE"].ToString();
                    profi.Naturalidade = dr["NATURALIDADE"].ToString();
                    profi.Nome = dr["NOME"].ToString();
                    if (dr["NUMERO"] != null)
                        profi.Numero = Convert.ToInt32(dr["NUMERO"].ToString());
                    else profi.Numero = 0;
                    profi.Numero_iss = dr["NUMERO_ISS"].ToString();
                    profi.Numero_pis = dr["NUMERO_PIS"].ToString();
                    profi.Orgao_expeditor_rg = dr["ORGAO_EXPEDITOR_RG"].ToString();
                    profi.Pai = dr["PAI"].ToString();
                    profi.Registro_profissional = dr["REGISTRO_PROFISSIONAL"].ToString();
                    profi.Rg = dr["RG"].ToString();
                    profi.Situacao = dr["SITUACAO"].ToString();
                    profi.Telefone = dr["TELEFONE"].ToString();
                    profi.Uf_endereco = dr["UF_ENDERECO"].ToString();
                    profi.Uf_naturalidade = dr["UF_NATURALIDADE"].ToString();
                    profi.Uf_rg = dr["UF_RG"].ToString();
                }
                return profi;
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
            finally
            {
                db.FecharConexao();
            }
        }
        #endregion

        #region Verifica se o cpf informado já está cadastrado
        public bool cpfJaCadastrado(string pCpf)
        {
            string SQL = @"SELECT tp.ID_PROFISSIONAL
                            FROM   TB_PROFISSIONAL tp
                            WHERE  tp.CPF = @CPF";
            DataAccess db = new DataAccess(SQL);
            db.AddParam("@CPF", SqlDbType.VarChar, pCpf);
            return db.GetDataTable().Rows.Count > 0;
        }
        #endregion

        #region Inserir Profissional
        public bool inserirProfissional(Profissional profi, string usuario)
        {
            #region Script
            string SQL = @"INSERT INTO TB_PROFISSIONAL
                              (
                                NOME,
                                CPF,
                                RG,
                                ORGAO_EXPEDITOR_RG,
                                UF_RG,
                                DATA_EXPEDICAO_RG,
                                NACIONALIDADE,
                                NATURALIDADE,
                                UF_NATURALIDADE,
                                GENERO,
                                ESTADO_CIVIL,
                                NUMERO_ISS,
                                NUMERO_PIS,
                                REGISTRO_PROFISSIONAL,
                                EMAIL,
                                DDD_TELEFONE,
                                TELEFONE,
                                DDD_CELULAR,
                                CELULAR,
                                PAI,
                                MAE,
                                CEP,
                                ENDERECO,
                                NUMERO,
                                COMPLEMENTO,
                                BAIRRO,
                                UF_ENDERECO,
                                CIDADE,
                                ID_BANCO,
                                AGENCIA,
                                CONTA,
                                SITUACAO,
                                DATA_CADASTRO
                              )
                            VALUES
                              (
                                @NOME,
                                @CPF,
                                @RG,
                                @ORGAO_EXPEDITOR_RG,
                                @UF_RG,
                                @DATA_EXPEDICAO_RG,
                                @NACIONALIDADE,
                                @NATURALIDADE,
                                @UF_NATURALIDADE,
                                @GENERO,
                                @ESTADO_CIVIL,
                                @NUMERO_ISS,
                                @NUMERO_PIS,
                                @REGISTRO_PROFISSIONAL,
                                @EMAIL,
                                @DDD_TELEFONE,
                                @TELEFONE,
                                @DDD_CELULAR,
                                @CELULAR,
                                @PAI,
                                @MAE,
                                @CEP,
                                @ENDERECO,
                                @NUMERO,
                                @COMPLEMENTO,
                                @BAIRRO,
                                @UF_ENDERECO,
                                @CIDADE,
                                @ID_BANCO,
                                @AGENCIA,
                                @CONTA,
                                @SITUACAO,
                                GETDATE()
                              )";
            #endregion
            DataAccess db = new DataAccess(SQL);
            db.AddParam("@NOME", SqlDbType.VarChar, profi.Nome);
            db.AddParam("@CPF", SqlDbType.VarChar, profi.Cpf);
            db.AddParam("@RG", SqlDbType.VarChar, profi.Rg);
            db.AddParam("@ORGAO_EXPEDITOR_RG", SqlDbType.VarChar, profi.Orgao_expeditor_rg);
            db.AddParam("@UF_RG", SqlDbType.VarChar, profi.Uf_rg);
            db.AddParam("@DATA_EXPEDICAO_RG", SqlDbType.Date, profi.Data_expedicao_rg);
            db.AddParam("@NACIONALIDADE", SqlDbType.VarChar, profi.Nacionalidade);
            db.AddParam("@NATURALIDADE", SqlDbType.VarChar, profi.Naturalidade);
            db.AddParam("@UF_NATURALIDADE", SqlDbType.VarChar, profi.Uf_naturalidade);
            db.AddParam("@GENERO", SqlDbType.VarChar, profi.Genero);
            db.AddParam("@ESTADO_CIVIL", SqlDbType.VarChar, profi.Estado_civil);
            db.AddParam("@NUMERO_ISS", SqlDbType.VarChar, profi.Numero_iss);
            db.AddParam("@NUMERO_PIS", SqlDbType.VarChar, profi.Numero_pis);
            db.AddParam("@REGISTRO_PROFISSIONAL", SqlDbType.VarChar, profi.Registro_profissional);
            db.AddParam("@EMAIL", SqlDbType.VarChar, profi.Email);
            db.AddParam("@DDD_TELEFONE", SqlDbType.VarChar, profi.Ddd_telefone);
            db.AddParam("@TELEFONE", SqlDbType.VarChar, profi.Telefone);
            db.AddParam("@DDD_CELULAR", SqlDbType.VarChar, profi.Ddd_celular);
            db.AddParam("@CELULAR", SqlDbType.VarChar, profi.Celular);
            db.AddParam("@PAI", SqlDbType.VarChar, profi.Pai);
            db.AddParam("@MAE", SqlDbType.VarChar, profi.Mae);
            db.AddParam("@CEP", SqlDbType.VarChar, profi.Cep);
            db.AddParam("@ENDERECO", SqlDbType.VarChar, profi.Endereco);
            db.AddParam("@NUMERO", SqlDbType.Int, profi.Numero);
            db.AddParam("@COMPLEMENTO", SqlDbType.VarChar, profi.Complemento);
            db.AddParam("@BAIRRO", SqlDbType.VarChar, profi.Bairro);
            db.AddParam("@UF_ENDERECO", SqlDbType.VarChar, profi.Uf_endereco);
            db.AddParam("@CIDADE", SqlDbType.VarChar, profi.Cidade);
            db.AddParam("@ID_BANCO", SqlDbType.Int, profi.CodBanco);
            db.AddParam("@AGENCIA", SqlDbType.VarChar, profi.Agencia);
            db.AddParam("@CONTA", SqlDbType.VarChar, profi.Conta);
            db.AddParam("@SITUACAO", SqlDbType.VarChar, profi.Situacao);
            //return db.ExecuteNonQuery();

            bool inseriu = db.ExecuteNonQuery();

            if (inseriu)
            {
                SQL = @"INSERT INTO TB_AUDITORIA
                  (
                    ACAO,
                    TABELA,
                    DESCRICAO,
                    USUARIO,
                    DATA                                    
                  )
                VALUES
                  (                                     
                    'INSERT',
                    'TB_PROFISSIONAL',
                    ((SELECT CAST(MAX(ID_PROFISSIONAL) AS VARCHAR) FROM TB_PROFISSIONAL)
                     + ' | ' + UPPER(@NOME)
                     + ' | ' + UPPER(@CPF)
                     + ' | ' + UPPER(@RG)
                     + ' | ' + UPPER(@ORGAO_EXPEDIDOR_RG)
                     + ' | ' + UPPER(@UF_RG)
                     + ' | ' + UPPER(@EMAIL)
                     + ' | ' + UPPER(@ID_BANCO)
                     + ' | ' + UPPER(@AGENCIA)
                     + ' | ' + UPPER(@CONTA)
                     + ' | ' + UPPER(@SITUACAO)),                        
                    UPPER(@USUARIO),
                    GETDATE()
                  )";

                db = new DataAccess(SQL);

                db.AddParam("@NOME", SqlDbType.VarChar, profi.Nome);
                db.AddParam("@CPF", SqlDbType.VarChar, profi.Cpf);
                db.AddParam("@RG", SqlDbType.VarChar, profi.Rg);
                db.AddParam("@ORGAO_EXPEDIDOR_RG", SqlDbType.VarChar, profi.Orgao_expeditor_rg);
                db.AddParam("@UF_RG", SqlDbType.VarChar, profi.Uf_rg);
                db.AddParam("@EMAIL", SqlDbType.VarChar, profi.Email);
                db.AddParam("@ID_BANCO", SqlDbType.Int, profi.CodBanco);
                db.AddParam("@AGENCIA", SqlDbType.VarChar, profi.Agencia);
                db.AddParam("@CONTA", SqlDbType.VarChar, profi.Conta);
                db.AddParam("@SITUACAO", SqlDbType.VarChar, profi.Situacao);                
                db.AddParam("@USUARIO", SqlDbType.VarChar, usuario);
            }
            db.ExecuteNonQuery();
            return inseriu;

        }
        #endregion

        #region Alterar Profissional
        public bool alterarProfissional(Profissional profi, string usuario)
        {
            string SQL = @"UPDATE TB_PROFISSIONAL
                            SET    NOME                   = @NOME,
                                   CPF                    = @CPF,
                                   RG                     = @RG,
                                   ORGAO_EXPEDITOR_RG     = @ORGAO_EXPEDITOR_RG,
                                   UF_RG                  = @UF_RG,
                                   DATA_EXPEDICAO_RG      = @DATA_EXPEDICAO_RG,
                                   NACIONALIDADE          = @NACIONALIDADE,
                                   NATURALIDADE           = @NATURALIDADE,
                                   UF_NATURALIDADE        = @UF_NATURALIDADE,
                                   GENERO                 = @GENERO,
                                   ESTADO_CIVIL           = @ESTADO_CIVIL,
                                   NUMERO_ISS             = @NUMERO_ISS,
                                   NUMERO_PIS             = @NUMERO_PIS,
                                   REGISTRO_PROFISSIONAL  = @REGISTRO_PROFISSIONAL,
                                   EMAIL                  = @EMAIL,
                                   DDD_TELEFONE           = @DDD_TELEFONE,
                                   TELEFONE               = @TELEFONE,
                                   DDD_CELULAR            = @DDD_CELULAR,
                                   CELULAR                = @CELULAR,
                                   PAI                    = @PAI,
                                   MAE                    = @MAE,
                                   CEP                    = @CEP,
                                   ENDERECO               = @ENDERECO,
                                   NUMERO                 = @NUMERO,
                                   COMPLEMENTO            = @COMPLEMENTO,
                                   BAIRRO                 = @BAIRRO,
                                   UF_ENDERECO            = @UF_ENDERECO,
                                   CIDADE                 = @CIDADE,
                                   ID_BANCO               = @ID_BANCO,
                                   AGENCIA                = @AGENCIA,
                                   CONTA                  = @CONTA,
                                   SITUACAO               = @SITUACAO
                            WHERE  ID_PROFISSIONAL        = @ID_PROFISSIONAL";
            
            DataAccess db = new DataAccess(SQL);
            
            db.AddParam("@ID_PROFISSIONAL", SqlDbType.Int, profi.Codigo);
            db.AddParam("@NOME", SqlDbType.VarChar, profi.Nome);
            db.AddParam("@CPF", SqlDbType.VarChar, profi.Cpf);
            db.AddParam("@RG", SqlDbType.VarChar, profi.Rg);
            db.AddParam("@ORGAO_EXPEDITOR_RG", SqlDbType.VarChar, profi.Orgao_expeditor_rg);
            db.AddParam("@UF_RG", SqlDbType.VarChar, profi.Uf_rg);
            db.AddParam("@DATA_EXPEDICAO_RG", SqlDbType.Date, profi.Data_expedicao_rg);
            db.AddParam("@NACIONALIDADE", SqlDbType.VarChar, profi.Nacionalidade);
            db.AddParam("@NATURALIDADE", SqlDbType.VarChar, profi.Naturalidade);
            db.AddParam("@UF_NATURALIDADE", SqlDbType.VarChar, profi.Uf_naturalidade);
            db.AddParam("@GENERO", SqlDbType.VarChar, profi.Genero);
            db.AddParam("@ESTADO_CIVIL", SqlDbType.VarChar, profi.Estado_civil);
            db.AddParam("@NUMERO_ISS", SqlDbType.VarChar, profi.Numero_iss);
            db.AddParam("@NUMERO_PIS", SqlDbType.VarChar, profi.Numero_pis);
            db.AddParam("@REGISTRO_PROFISSIONAL", SqlDbType.VarChar, profi.Registro_profissional);
            db.AddParam("@EMAIL", SqlDbType.VarChar, profi.Email);
            db.AddParam("@DDD_TELEFONE", SqlDbType.VarChar, profi.Ddd_telefone);
            db.AddParam("@TELEFONE", SqlDbType.VarChar, profi.Telefone);
            db.AddParam("@DDD_CELULAR", SqlDbType.VarChar, profi.Ddd_celular);
            db.AddParam("@CELULAR", SqlDbType.VarChar, profi.Celular);
            db.AddParam("@PAI", SqlDbType.VarChar, profi.Pai);
            db.AddParam("@MAE", SqlDbType.VarChar, profi.Mae);
            db.AddParam("@CEP", SqlDbType.VarChar, profi.Cep);
            db.AddParam("@ENDERECO", SqlDbType.VarChar, profi.Endereco);
            db.AddParam("@NUMERO", SqlDbType.Int, profi.Numero);
            db.AddParam("@COMPLEMENTO", SqlDbType.VarChar, profi.Complemento);
            db.AddParam("@BAIRRO", SqlDbType.VarChar, profi.Bairro);
            db.AddParam("@UF_ENDERECO", SqlDbType.VarChar, profi.Uf_endereco);
            db.AddParam("@CIDADE", SqlDbType.VarChar, profi.Cidade);
            db.AddParam("@ID_BANCO", SqlDbType.Int, profi.CodBanco);
            db.AddParam("@AGENCIA", SqlDbType.VarChar, profi.Agencia);
            db.AddParam("@CONTA", SqlDbType.VarChar, profi.Conta);
            db.AddParam("@SITUACAO", SqlDbType.VarChar, profi.Situacao);
            //return db.ExecuteNonQuery();

            bool atualizou = db.ExecuteNonQuery();

            if (atualizou)
            {
                SQL = @"INSERT INTO TB_AUDITORIA
                  (
                    ACAO,
                    TABELA,
                    DESCRICAO,
                    USUARIO,
                    DATA                                    
                  )
                VALUES
                  (                                     
                    'UPDATE',
                    'TB_PROFISSIONAL',
                     (SELECT CAST(@ID_PROFISSIONAL AS VARCHAR)
                     + ' | ' + UPPER(@NOME)
                     + ' | ' + UPPER(@CPF)
                     + ' | ' + UPPER(@RG)
                     + ' | ' + UPPER(@ORGAO_EXPEDIDOR_RG)
                     + ' | ' + UPPER(@UF_RG)
                     + ' | ' + UPPER(@EMAIL)
                     + ' | ' + UPPER(@ID_BANCO)
                     + ' | ' + UPPER(@AGENCIA)
                     + ' | ' + UPPER(@CONTA)
                     + ' | ' + UPPER(@SITUACAO)),                        
                    UPPER(@USUARIO),
                    GETDATE()
                  )";

                db = new DataAccess(SQL);

                db.AddParam("@ID_PROFISSIONAL", SqlDbType.VarChar, profi.Codigo);
                db.AddParam("@NOME", SqlDbType.VarChar, profi.Nome);
                db.AddParam("@CPF", SqlDbType.VarChar, profi.Cpf);
                db.AddParam("@RG", SqlDbType.VarChar, profi.Rg);
                db.AddParam("@ORGAO_EXPEDIDOR_RG", SqlDbType.VarChar, profi.Orgao_expeditor_rg);
                db.AddParam("@UF_RG", SqlDbType.VarChar, profi.Uf_rg);
                db.AddParam("@EMAIL", SqlDbType.VarChar, profi.Email);
                db.AddParam("@ID_BANCO", SqlDbType.Int, profi.CodBanco);
                db.AddParam("@AGENCIA", SqlDbType.VarChar, profi.Agencia);
                db.AddParam("@CONTA", SqlDbType.VarChar, profi.Conta);
                db.AddParam("@SITUACAO", SqlDbType.VarChar, profi.Situacao);
                db.AddParam("@USUARIO", SqlDbType.VarChar, usuario);
            }
            db.ExecuteNonQuery();
            return atualizou;
        }
        #endregion

        #region Excluir Profissional
        public bool excluirProfissional(Profissional profissional, string usuario)
        {
            string SQL = @"DELETE 
                            FROM   TB_PROFISSIONAL
                            WHERE  ID_PROFISSIONAL = @ID_PROFISSIONAL";
            DataAccess db = new DataAccess(SQL);
            db.AddParam("@ID_PROFISSIONAL", SqlDbType.Int, profissional.Codigo);
            
            //return db.ExecuteNonQuery();

            bool excluiu = db.ExecuteNonQuery();

            if (excluiu)
            {
                SQL = @"INSERT INTO TB_AUDITORIA
                  (
                    ACAO,
                    TABELA,
                    DESCRICAO,
                    USUARIO,
                    DATA                                    
                  )
                VALUES
                  (                                     
                    'DELETE',
                    'TB_PROFISSIONAL',
                    (SELECT CAST(@ID_PROFISSIONAL AS VARCHAR)
                     + ' | ' + UPPER(@NOME)
                     + ' | ' + UPPER(@CPF)
                     + ' | ' + UPPER(@RG)
                     + ' | ' + UPPER(@ORGAO_EXPEDIDOR_RG)
                     + ' | ' + UPPER(@UF_RG)
                     + ' | ' + UPPER(@EMAIL)
                     + ' | ' + UPPER(@ID_BANCO)
                     + ' | ' + UPPER(@AGENCIA)
                     + ' | ' + UPPER(@CONTA)
                     + ' | ' + UPPER(@SITUACAO)),                        
                    UPPER(@USUARIO),
                    GETDATE()
                  )";

                db = new DataAccess(SQL);

                db.AddParam("@ID_PROFISSIONAL", SqlDbType.VarChar, profissional.Codigo);
                db.AddParam("@NOME", SqlDbType.VarChar, profissional.Nome);
                db.AddParam("@CPF", SqlDbType.VarChar, profissional.Cpf);
                db.AddParam("@RG", SqlDbType.VarChar, profissional.Rg);
                db.AddParam("@ORGAO_EXPEDIDOR_RG", SqlDbType.VarChar, profissional.Orgao_expeditor_rg);
                db.AddParam("@UF_RG", SqlDbType.VarChar, profissional.Uf_rg);
                db.AddParam("@EMAIL", SqlDbType.VarChar, profissional.Email);
                db.AddParam("@ID_BANCO", SqlDbType.Int, profissional.CodBanco);
                db.AddParam("@AGENCIA", SqlDbType.VarChar, profissional.Agencia);
                db.AddParam("@CONTA", SqlDbType.VarChar, profissional.Conta);
                db.AddParam("@SITUACAO", SqlDbType.VarChar, profissional.Situacao);
                db.AddParam("@USUARIO", SqlDbType.VarChar, usuario);
            }
            db.ExecuteNonQuery();
            return excluiu;
        }
        #endregion

        #region Get Titulações
        public DataTable getTitulacoes(int pCodProfissional)
        {
            string SQL = @"SELECT  tpt.ID_PROFISSIONAL_TITULACAO,
                                   tpt.ID_PROFISSIONAL,
                                   tnt.DESCRICAO AS NIVEL,
                                   tpt.DESCRICAO_TITULACAO AS TITULO,
                                   tpt.ANO_CONCLUSAO,
                                   tpt.INSTITUICAO,
                                   tpt.SITUACAO
                            FROM   TB_PROFISSIONAL_TITULACAO tpt
                                   JOIN TB_NIVEL_TITULACAO tnt
                                        ON  tnt.ID_NIVEL_TITULACAO = tpt.ID_NIVEL_TITULACAO
                            WHERE  tpt.ID_PROFISSIONAL = @ID_PROFISSIONAL";
            DataAccess db = new DataAccess(SQL);
            db.AddParam("@ID_PROFISSIONAL", SqlDbType.Int, pCodProfissional);
            return db.GetDataTable();
        }
        #endregion

        #region Get Dados Titulação
        public Titulacao getDadosTitulacao(int pCodTitulacao)
        {
            string SQL = @"SELECT tpt.ID_PROFISSIONAL_TITULACAO,
                                   tpt.ID_PROFISSIONAL,
                                   tpt.ID_NIVEL_TITULACAO,
                                   tpt.DESCRICAO_TITULACAO,
                                   tpt.ANO_CONCLUSAO,
                                   tpt.INSTITUICAO,
                                   tpt.SITUACAO
                            FROM   TB_PROFISSIONAL_TITULACAO tpt
                            WHERE  tpt.ID_PROFISSIONAL_TITULACAO = @ID_PROFISSIONAL_TITULACAO";
            DataAccess db = new DataAccess(SQL);
            db.AddParam("@ID_PROFISSIONAL_TITULACAO", SqlDbType.Int, pCodTitulacao);
            try
            {
                db.AbrirConexao();
                SqlDataReader dr = db.ExecuteReader();
                Titulacao titulacao = new Titulacao();
                if (dr.Read())
                {
                    titulacao.Codigo = Convert.ToInt32(dr["ID_PROFISSIONAL_TITULACAO"]);
                    titulacao.AnoConclusao = Convert.ToInt32(dr["ANO_CONCLUSAO"]);
                    titulacao.CodNivelTitulacao = Convert.ToInt32(dr["ID_NIVEL_TITULACAO"]);
                    titulacao.CodProfissional = Convert.ToInt32(dr["ID_PROFISSIONAL"]);
                    titulacao.Instituicao = dr["INSTITUICAO"].ToString();
                    titulacao.Situacao = dr["SITUACAO"].ToString();
                    titulacao.Titulo = dr["DESCRICAO_TITULACAO"].ToString();
                }
                return titulacao;
            }
            catch
            {
                return null;
            }
            finally
            {
                db.FecharConexao();
            }
        }
        #endregion

        #region Incluir Titulação
        public bool incluirTitulacao(Titulacao titulacao, string usuario)
        {
            string SQL = @"INSERT INTO TB_PROFISSIONAL_TITULACAO
                              (
                                ID_PROFISSIONAL,
                                ID_NIVEL_TITULACAO,
                                DESCRICAO_TITULACAO,
                                ANO_CONCLUSAO,
                                INSTITUICAO,
                                SITUACAO,
                                DATA_CADASTRO
                              )
                            VALUES
                              (
                                @ID_PROFISSIONAL,
                                @ID_NIVEL_TITULACAO,
                                @DESCRICAO_TITULACAO,
                                @ANO_CONCLUSAO,
                                @INSTITUICAO,
                                @SITUACAO,
                                GETDATE()
                              )";
            DataAccess db = new DataAccess(SQL);
            
            db.AddParam("@ID_PROFISSIONAL", SqlDbType.Int, titulacao.CodProfissional);
            db.AddParam("@ID_NIVEL_TITULACAO", SqlDbType.Int, titulacao.CodNivelTitulacao);
            db.AddParam("@DESCRICAO_TITULACAO", SqlDbType.VarChar, titulacao.Titulo);
            db.AddParam("@ANO_CONCLUSAO", SqlDbType.Int, titulacao.AnoConclusao);
            db.AddParam("@INSTITUICAO", SqlDbType.VarChar, titulacao.Instituicao);
            db.AddParam("@SITUACAO", SqlDbType.VarChar, titulacao.Situacao);

            //return db.ExecuteNonQuery();

            bool inseriu = db.ExecuteNonQuery();

            if (inseriu)
            {
                SQL = @"INSERT INTO TB_AUDITORIA
                  (
                    ACAO,
                    TABELA,
                    DESCRICAO,
                    USUARIO,
                    DATA                                    
                  )
                VALUES
                  (                                     
                    'INSERT',
                    'TB_PROFISSIONAL_TITULACAO',
                    ((SELECT CAST(MAX(ID_PROFISSIONAL_TITULACAO) AS VARCHAR) FROM TB_PROFISSIONAL_TITULACAO)
                     + ' | ' + CAST(@ID_PROFISSIONAL AS VARCHAR)
                     + ' | ' + CAST(@ID_NIVEL_TITULACAO AS VARCHAR)
                     + ' | ' + UPPER(@DESCRICAO_TITULACAO)
                     + ' | ' + UPPER(@INSTITUICAO)
                     + ' | ' + UPPER(@SITUACAO)),                        
                    UPPER(@USUARIO),
                    GETDATE()
                 )";

                db = new DataAccess(SQL);

                db.AddParam("@ID_PROFISSIONAL", SqlDbType.Int, titulacao.CodProfissional);
                db.AddParam("@ID_NIVEL_TITULACAO", SqlDbType.Int, titulacao.CodNivelTitulacao);
                db.AddParam("@DESCRICAO_TITULACAO", SqlDbType.VarChar, titulacao.Titulo);
                db.AddParam("@ANO_CONCLUSAO", SqlDbType.Int, titulacao.AnoConclusao);
                db.AddParam("@INSTITUICAO", SqlDbType.VarChar, titulacao.Instituicao);
                db.AddParam("@SITUACAO", SqlDbType.VarChar, titulacao.Situacao);
                db.AddParam("@USUARIO", SqlDbType.VarChar, usuario);
            }
            db.ExecuteNonQuery();
            return inseriu;
        }
        #endregion

        #region Alterar Titulação
        public bool alterarTitulacao(Titulacao titulacao, string usuario)
        {
            string SQL = @"UPDATE TB_PROFISSIONAL_TITULACAO
                            SET    ID_NIVEL_TITULACAO         = @ID_NIVEL_TITULACAO,
                                   DESCRICAO_TITULACAO        = @DESCRICAO_TITULACAO,
                                   ANO_CONCLUSAO              = @ANO_CONCLUSAO,
                                   INSTITUICAO                = @INSTITUICAO,
                                   SITUACAO                   = @SITUACAO
                            WHERE  ID_PROFISSIONAL_TITULACAO  = @ID_PROFISSIONAL_TITULACAO";
            DataAccess db = new DataAccess(SQL);
                    
            db.AddParam("@ID_PROFISSIONAL_TITULACAO", SqlDbType.Int, titulacao.Codigo);
            db.AddParam("@ID_NIVEL_TITULACAO", SqlDbType.Int, titulacao.CodNivelTitulacao);
            db.AddParam("@DESCRICAO_TITULACAO", SqlDbType.VarChar, titulacao.Titulo);
            db.AddParam("@ANO_CONCLUSAO", SqlDbType.Int, titulacao.AnoConclusao);
            db.AddParam("@INSTITUICAO", SqlDbType.VarChar, titulacao.Instituicao);
            db.AddParam("@SITUACAO", SqlDbType.VarChar, titulacao.Situacao);

            //return db.ExecuteNonQuery();

            bool atualizou = db.ExecuteNonQuery();

            if (atualizou)
            {
                SQL = @"INSERT INTO TB_AUDITORIA
                  (
                    ACAO,
                    TABELA,
                    DESCRICAO,
                    USUARIO,
                    DATA                                    
                  )
                VALUES
                  (                                     
                    'UPDATE',
                    'TB_PROFISSIONAL_TITULACAO',
                    (SELECT CAST(@ID_PROFISSIONAL_TITULACAO AS VARCHAR)
                     + ' | ' + CAST(@ID_NIVEL_TITULACAO AS VARCHAR)
                     + ' | ' + UPPER(@DESCRICAO_TITULACAO)
                     + ' | ' + UPPER(@INSTITUICAO)
                     + ' | ' + UPPER(@SITUACAO)),                        
                    UPPER(@USUARIO),
                    GETDATE()
                 )";

                db = new DataAccess(SQL);

                db.AddParam("@ID_PROFISSIONAL_TITULACAO", SqlDbType.Int, titulacao.CodProfissional);
                db.AddParam("@ID_NIVEL_TITULACAO", SqlDbType.Int, titulacao.CodNivelTitulacao);
                db.AddParam("@DESCRICAO_TITULACAO", SqlDbType.VarChar, titulacao.Titulo);
                db.AddParam("@INSTITUICAO", SqlDbType.VarChar, titulacao.Instituicao);
                db.AddParam("@SITUACAO", SqlDbType.VarChar, titulacao.Situacao);
                db.AddParam("@USUARIO", SqlDbType.VarChar, usuario);
            }
            db.ExecuteNonQuery();
            return atualizou;
        }
        #endregion

        #region Excluir Titulação
        public bool excluirTitulacao(Titulacao titulacao, string usuario)
        {
            string SQL = @"DELETE 
                            FROM   TB_PROFISSIONAL_TITULACAO
                            WHERE  ID_PROFISSIONAL_TITULACAO = @ID_PROFISSIONAL_TITULACAO";
            DataAccess db = new DataAccess(SQL);
            db.AddParam("@ID_PROFISSIONAL_TITULACAO", SqlDbType.Int, titulacao.Codigo);
            
            //return db.ExecuteNonQuery();

            bool excluiu = db.ExecuteNonQuery();

            if (excluiu)
            {
                SQL = @"INSERT INTO TB_AUDITORIA
                  (
                    ACAO,
                    TABELA,
                    DESCRICAO,
                    USUARIO,
                    DATA                                    
                  )
                VALUES
                  (                                     
                    'DELETE',
                    'TB_PROFISSIONAL_TITULACAO',
                    (SELECT CAST(@ID_PROFISSIONAL_TITULACAO AS VARCHAR)
                     + ' | ' + CAST(@ID_NIVEL_TITULACAO AS VARCHAR)
                     + ' | ' + UPPER(@DESCRICAO_TITULACAO)
                     + ' | ' + UPPER(@INSTITUICAO)
                     + ' | ' + UPPER(@SITUACAO)),                           
                    UPPER(@USUARIO),
                    GETDATE()
                 )";

                db = new DataAccess(SQL);

                db.AddParam("@ID_PROFISSIONAL_TITULACAO", SqlDbType.Int, titulacao.CodProfissional);
                db.AddParam("@ID_NIVEL_TITULACAO", SqlDbType.Int, titulacao.CodNivelTitulacao);
                db.AddParam("@DESCRICAO_TITULACAO", SqlDbType.VarChar, titulacao.Titulo);
                db.AddParam("@INSTITUICAO", SqlDbType.VarChar, titulacao.Instituicao);
                db.AddParam("@SITUACAO", SqlDbType.VarChar, titulacao.Situacao);
                db.AddParam("@USUARIO", SqlDbType.VarChar, usuario);
            }

            db.ExecuteNonQuery();
            return excluiu;
        }
        #endregion

        #region Get Disciplinas Apto à Ministrar
        public DataTable getDisciplinasAptoMinistrar(int pCodProfissional)
        {
            string SQL = @"SELECT tpdam.ID_PROFISSIONAL_DISCIPLINA,
                                   td.DESCRICAO AS DISCIPLINA
                            FROM   TB_PROFISSIONAL_DISCIPLINA_APTO_MINISTRAR tpdam
                                   JOIN TB_DISCIPLINA td
                                        ON  td.ID_DISCIPLINA = tpdam.ID_DISCIPLINA
                            WHERE  tpdam.ID_PROFISSIONAL = @ID_PROFISSIONAL";
            DataAccess db = new DataAccess(SQL);
            db.AddParam("@ID_PROFISSIONAL", SqlDbType.Int, pCodProfissional);
            return db.GetDataTable();
        }
        #endregion

        #region Verificar Disciplina Já Existente ao Profissional
        public bool disciplinaJaExistenteMinistrar(int pCodProfissional, int pCodDisciplina)
        {
            string SQL = @"SELECT COUNT(*) AS TOTAL
                            FROM   TB_PROFISSIONAL_DISCIPLINA_APTO_MINISTRAR tpdam
                            WHERE  tpdam.ID_PROFISSIONAL = @ID_PROFISSIONAL
                                   AND tpdam.ID_DISCIPLINA = @ID_DISCIPLINA";
            DataAccess db = new DataAccess(SQL);
            db.AddParam("@ID_PROFISSIONAL", SqlDbType.Int, pCodProfissional);
            db.AddParam("@ID_DISCIPLINA", SqlDbType.Int, pCodDisciplina);
            return Convert.ToInt32(db.GetDataTable().Rows[0]["TOTAL"]) > 0;
        }
        #endregion

        #region Incluir Disciplina à ministrar
        public bool incluirDisciplinaMinistrar(int pCodProfissional, int pCodDisciplina, string usuario)
        {
            string SQL = @"INSERT INTO TB_PROFISSIONAL_DISCIPLINA_APTO_MINISTRAR
                              (
                                ID_PROFISSIONAL,
                                ID_DISCIPLINA,
                                DATA_CADASTRO
                              )
                            VALUES
                              (
                                @ID_PROFISSIONAL,
                                @ID_DISCIPLINA,
                                GETDATE()
                              )";
            DataAccess db = new DataAccess(SQL);
            db.AddParam("@ID_PROFISSIONAL", SqlDbType.Int, pCodProfissional);
            db.AddParam("@ID_DISCIPLINA", SqlDbType.Int, pCodDisciplina);

            //return db.ExecuteNonQuery();

            bool inseriu = db.ExecuteNonQuery();

            if (inseriu)
            {
                SQL = @"INSERT INTO TB_AUDITORIA
                  (
                    ACAO,
                    TABELA,
                    DESCRICAO,
                    USUARIO,
                    DATA                                    
                  )
                VALUES
                  (                                     
                    'INSERT',
                    'TB_PROFISSIONAL_DISCIPLINA_APTO_MINISTRAR',
                    (SELECT(SELECT CAST(MAX(ID_PROFISSIONAL_DISCIPLINA) AS VARCHAR) FROM TB_PROFISSIONAL_DISCIPLINA_APTO_MINISTRAR)
                     + ' | ' + CAST(@ID_PROFISSIONAL AS VARCHAR)
                     + ' | ' + CAST(@ID_DISCIPLINA AS VARCHAR)),                           
                    UPPER(@USUARIO),
                    GETDATE()
                 )";

                db = new DataAccess(SQL);

                db.AddParam("@ID_PROFISSIONAL", SqlDbType.Int, pCodProfissional);
                db.AddParam("@ID_DISCIPLINA", SqlDbType.Int, pCodDisciplina);
                db.AddParam("@USUARIO", SqlDbType.VarChar, usuario);
            }

            db.ExecuteNonQuery();
            return inseriu;
        }
        #endregion

        #region Excluir Disciplina à ministrar
        public bool excluirDisciplinaMinistrar(int pCodProfissionalDisc, string usuario)
        {
            string SQL = @"SELECT 
                            ID_PROFISSIONAL_DISCIPLINA,
                            ID_PROFISSIONAL,
                            ID_DISCIPLINA 
                                FROM   TB_PROFISSIONAL_DISCIPLINA_APTO_MINISTRAR
                                    WHERE  ID_PROFISSIONAL_DISCIPLINA = @ID_PROFISSIONAL_DISCIPLINA";
            
            DataAccess db = new DataAccess(SQL);
            db.AddParam("@ID_PROFISSIONAL_DISCIPLINA", SqlDbType.Int, pCodProfissionalDisc);
            int idProfDisc = 0;
            int idProf = 0;
            int idDisc = 0;

            try
            {
                db.AbrirConexao();
                SqlDataReader dr = db.ExecuteReader();

                if (dr.Read())
                {
                    idProfDisc = Convert.ToInt32(dr["ID_PROFISSIONAL_DISCIPLINA"]);
                    idProf = Convert.ToInt32(dr["ID_PROFISSIONAL"]);
                    idDisc = Convert.ToInt32(dr["ID_DISCIPLINA"]);                    
                }
            }
            catch
            { return false; }
            finally
            { db.FecharConexao(); }

            db.AbrirConexao();
            db.Command.Parameters.Clear();

            SQL = @"DELETE 
                        FROM   TB_PROFISSIONAL_DISCIPLINA_APTO_MINISTRAR
                            WHERE  ID_PROFISSIONAL_DISCIPLINA = @ID_PROFISSIONAL_DISCIPLINA";

            db = new DataAccess(SQL);
            db.AddParam("@ID_PROFISSIONAL_DISCIPLINA", SqlDbType.Int, pCodProfissionalDisc);

            bool excluiu = db.ExecuteNonQuery();

            if (excluiu)
            {
                SQL = @"INSERT INTO TB_AUDITORIA
                                  (
                                    ACAO,
                                    TABELA,
                                    DESCRICAO,
                                    USUARIO,
                                    DATA                                    
                                  )
                                VALUES
                                  (                                     
                                    'DELETE',
                                    'TB_PROFISSIONAL_DISCIPLINA_APTO_MINISTRAR',
                                    (SELECT CAST(@ID_PROFISSIONAL_DISCIPLINA AS VARCHAR)
                                     + ' | ' + CAST(@ID_PROFISSIONAL AS VARCHAR)
                                     + ' | ' + CAST(@ID_DISCIPLINA AS VARCHAR)),                           
                                    UPPER(@USUARIO),
                                    GETDATE()
                                 )";

                db = new DataAccess(SQL);

                db.AddParam("@ID_PROFISSIONAL_DISCIPLINA", SqlDbType.Int, idProfDisc);
                db.AddParam("@ID_PROFISSIONAL", SqlDbType.Int, idProf);
                db.AddParam("@ID_DISCIPLINA", SqlDbType.Int, idDisc);
                db.AddParam("@USUARIO", SqlDbType.VarChar, usuario);
            }

            db.ExecuteNonQuery();
            return excluiu;
        }
        #endregion
    }
}
